package com.xiaochen.user.service.impl;

import com.xiaochen.user.service.SmsService;
import com.xiaochen.utils.HttpUtils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import org.apache.http.HttpResponse;
import org.springframework.util.StringUtils;


import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@Slf4j
@Service
public class SmsServiceImpl implements SmsService {

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    @Override
    public void sendSmsCode(String phone) {
        // -------------将验证码的值写固定了Start------------
        // TODO: 为了测试方便我将验证码设置为了6666,如若想使用阿里云的短信接口,请将这段代码注释掉,并将下面的code定义成String型,String code = RandomStringUtils.randomNumeric(4);
        String code = redisTemplate.opsForValue().get(phone);
        if (StringUtils.hasText(code)){
            log.info(redisTemplate.opsForValue().get(phone));
            return;
        }
        // -------------将验证码的值写固定了End------------



        // 1.生成验证码
        code = RandomStringUtils.randomNumeric(4);

        // 2.将生成的验证码放入redis里面,设置过期时间
        redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
        // 3.调用短信api接口,发送验证码
        sendSmsCodeMessage(phone,code);
    }

    // 3.调用短信api接口,发送验证码
    private void sendSmsCodeMessage(String phone, String code) {
            String host = "https://gyytz.market.alicloudapi.com";
            String path = "/sms/smsSend";
            String method = "POST";
            String appcode = "4fa581ce2e024d8d992e6dbe2f337073";
            Map<String, String> headers = new HashMap<String, String>();
            //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
            headers.put("Authorization", "APPCODE " + appcode);
            Map<String, String> querys = new HashMap<String, String>();
            querys.put("mobile", phone);
            querys.put("param", "**code**:"+code+",**minute**:5");

//smsSignId（短信前缀）和templateId（短信模板），可登录国阳云控制台自助申请。参考文档：http://help.guoyangyun.com/Problem/Qm.html

            querys.put("smsSignId", "2e65b1bb3d054466b82f0c9d125465e2");
            querys.put("templateId", "908e94ccf08b4476ba6c876d13f084ad");
            Map<String, String> bodys = new HashMap<String, String>();


            try {
                /**
                 * 重要提示如下:
                 * HttpUtils请从\r\n\t    \t* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java\r\n\t    \t* 下载
                 *
                 * 相应的依赖请参照
                 * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
                 */
                HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
                System.out.println(response.toString());
                //获取response的body
                //System.out.println(EntityUtils.toString(response.getEntity()));
            } catch (Exception e) {
                e.printStackTrace();
            }


    }
}
